package br.com.virtual.cadastrar.dao.impl;

import java.util.ArrayList;
import java.util.List;

import br.com.virtual.base.dao.impl.BaseDaoImpl;
import br.com.virtual.cadastrar.dao.GrupoDAO;
import br.com.virtual.cadastrar.model.Grupo;

public class GrupoDAOImpl extends BaseDaoImpl implements GrupoDAO {

	
	
	@Override
	public Grupo create(Grupo grupo) {

		getManager().persist(grupo);
		return grupo;
	}

	@Override
	public Grupo read(Long id) {
		return getManager().find(Grupo.class, id);
	}

	@Override
	public void update(Grupo grupo) {
		getManager().merge(grupo);
	}

	@Override
	public void delete(Grupo grupo) {
		getManager().remove(read(grupo.getId()));
	}

	@Override
	public List<Grupo> getList() {
		return this.list("");
	}

	@Override
	public List<Grupo> getListAtivo() {
		return this.list(" where c.ativo = true ");
	}

	private List<Grupo> list(String where) {
		return new ArrayList<Grupo>(getManager().createQuery(
				"from Grupo c " + where + " order by c.id desc", Grupo.class).getResultList());
	}

	@Override
	public List<Grupo> carregar() {

		List<Grupo> lista = new ArrayList<Grupo>(this
				.getManager()
				.createQuery(
						"select distinct g from Grupo g "
								+ "inner join fetch g.categorias c ",
						Grupo.class).getResultList());

		return lista;
	}
}
